#include <cstdio>
#include <cstdint>
#include <unistd.h>
#include <sys/timerfd.h>

int main()
{
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    if (timerfd < 0)
    {
        perror("create error\n");
        return -1;
    }
    struct itimerspec start;
    start.it_value.tv_sec = 3;  // 第一次超时的时间间隔，秒
    start.it_value.tv_nsec = 0; // 毫秒

    start.it_interval.tv_sec = 3;  // 第一次超时后，每次超时的时间间隔
    start.it_interval.tv_nsec = 0; // 毫秒
    timerfd_settime(timerfd, 0, &start, 0);

    while (true)
    {
        uint64_t times;
        int len = read(timerfd, &times, 8);
        if (len < 0)
        {
            perror("读取失败\n");
            return -1;
        }
        printf("读取超时，距离上一次超时了 %ld 次\n", times);
    }
    ::close(timerfd);
    return 0;
}